/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CONTABILIDAD_CONTROLADOR;

import CONTABILIDAD_MODELO.CON_PROYECTO;
import Conexion.Conexion;
import RRHH_Modelo.RHH_USUARIO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author equipo_4
 */
@WebServlet(name = "CON_VISTA_PROYECTO_CONTROLLER", urlPatterns = {"/CON_VISTA_PROYECTO_CONTROLLER"})
public class CON_VISTA_PROYECTO_CONTROLLER extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
           
            
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            
            String data="";
            RHH_USUARIO usuario = ((RHH_USUARIO)request.getSession().getAttribute("usr"));
            Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());
            
            String evento = request.getParameter("evento");
            
            switch(evento)
            {
                case "estado":
                    estado(request, response, con);
                    break;
                case"buscarnombre":
                    data=buscarnombre(request, response, con);
                    break;
                case"sincc":
                    data=sincc(request, response, con);
                    break;
                case"concc":
                    data=concc(request, response, con);
                    break;
            }
            
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/plain");
            response.getWriter().write(data);
            con.Close();
            
        } catch (SQLException ex) {
            Logger.getLogger(CON_VISTA_PROYECTO_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
    public void estado(HttpServletRequest request, HttpServletResponse response, Conexion con) throws SQLException
    {
            Double id = Double.parseDouble(request.getParameter("id"));
            Double estado = Double.parseDouble(request.getParameter("estado"));
            
            CON_PROYECTO proyecto = new CON_PROYECTO();
            proyecto.setCon(con);
            if(estado==0)
                proyecto.activar(id);
            else
                proyecto.DesHabilitar(id);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private String buscarnombre(HttpServletRequest request, HttpServletResponse response, Conexion con) throws SQLException {
        String data ="";
        String desc = request.getParameter("desc");
        String bcod_comprobante = request.getParameter("bcod_comprobante");
        String bfecha = request.getParameter("bfecha");
        String bcod_cuenta = request.getParameter("bcod_cuenta");
        String bdesc_cuenta = request.getParameter("bdesc_cuenta");
        String bcod_centro = request.getParameter("bcod_centro");
        String bdesc_centro = request.getParameter("bdesc_centro");
        String bglosa_cuenta = request.getParameter("bglosa_cuenta");
        String bglosa_comp = request.getParameter("bglosa_comp");
        String bdesc_comp = request.getParameter("bdesc_comp");
        String bestado = request.getParameter("bestado");
        String bdebe = request.getParameter("bdebe");
        String bhaber = request.getParameter("bhaber");
        
        
        if(!bcod_centro.equals("") || !bdesc_centro.equals(""))
        {
            String consulta = "select *\n" +
                            "from BROKER.CON_VISTA_PROYECTO\n" +
                            "where UPPER(DESCRIPCION) like UPPER('"+desc+"%')\n" +
                            "and CODIGO_COMPROBANTE like '"+bcod_comprobante+"%'\n" +
                            "and CODIGO_CUENTA like '"+bcod_cuenta+"%'\n" +
                            "and UPPER(DESCRIPCION_CUENTA) like UPPER('"+bdesc_cuenta+"%')\n" +
                            "and (UPPER(CODIGO_CENTRO_COSTO) like UPPER('"+bcod_centro+"%'))\n" +
                            "and (UPPER(DESCRIPCION_CENTRO_COSTO) like UPPER('"+bdesc_centro+"%') )\n" +
                            "and UPPER(GLOSA_CUENTA) like (UPPER('"+bglosa_cuenta+"%'))\n" +
                            "and UPPER(GLOSA_COMPROBANTE) like UPPER('"+bglosa_comp+"%')\n" +
                            "and UPPER(DESCRIPCION_COMPROBANTE) like UPPER('"+bdesc_comp+"%')\n" +
                            "and estado like '"+bestado+"%'"; 
            if(bdebe.length()>0){
                consulta+=" and DEBE_TC ="+bdebe;
            }
            if(bhaber.length()>0){
                consulta+=" and HABER_TC ="+bhaber;
            }
            
            consulta+="and to_char(FECHA,'DD/MM/YYYY') like '"+bfecha+"%' ORDER BY ID";
            ResultSet rs = con.EjecutarConsulta(consulta);
            double sumadebe=0;
            double sumahaber=0;
            while(rs.next())
            {
                data+="<tr>";                       
                data+="<td>"+rs.getString("DESCRIPCION")+"</td>";
                data+="<td>"+rs.getString("CODIGO_COMPROBANTE")+"</td>";
                data+="<td>"+rs.getString("TIPO")+"</td>";
                data+="<th class='pequeño'>TIPO</th>";
                data+="<td>"+d2.format(rs.getDate("FECHA"))+"</td>";
                data+="<td>"+rs.getString("CODIGO_CUENTA")+"</td>";
                data+="<td>"+rs.getString("DESCRIPCION_CUENTA")+"</td>";

                String cod_cen = rs.getString("CODIGO_CENTRO_COSTO");
                if(cod_cen!=null)
                    data+="<td>"+cod_cen+"</td>";
                else
                    data+="<td></td>";

                String desc_cen = rs.getString("DESCRIPCION_CENTRO_COSTO");
                if(desc_cen!=null)
                    data+="<td>"+desc_cen+"</td>";
                else
                    data+="<td></td>";

                data+="<td>"+rs.getString("GLOSA_CUENTA")+"</td>";
                data+="<td>"+rs.getString("GLOSA_COMPROBANTE")+"</td>";
                data+="<td>"+rs.getString("DESCRIPCION_COMPROBANTE")+"</td>";
                double debe = rs.getDouble("DEBE_TC");
                sumadebe+=debe;
                data+="<td>"+debe+"</td>";
                double haber=rs.getDouble("HABER_TC");
                sumahaber+=haber;
                data+="<td>"+haber+"</td>";

                Double estado = rs.getDouble("Estado");    
                data+="<td><span data-id=\""+rs.getDouble("ID")+"\"></span>";
                if(estado==0.0)
                {
                    data+="<input onchange='estado(this);'  type='checkbox' checked/>";
                }
                else
                {
                    data+="<input onchange='estado(this);'  type='checkbox'/>";
                }                        


                data+="</td>";
                data+="</tr>";            
            }
            data+="<tr>";
            data+="<td style='background: blue; color: white;' colspan='10'>TOTAL</td>";
            data+="<td style='background: #D9E5D9; color: black;'>"+sumadebe+"</td>";
            data+="<td style='background: #D9E5D9; color: black;'>"+sumahaber+"</td>";
            data+="</tr>";
        }       
        else
        {
            String consulta = "select *\n" +
                            "from BROKER.CON_VISTA_PROYECTO\n" +
                            "where UPPER(DESCRIPCION) like UPPER('"+desc+"%')\n" +
                            "and CODIGO_COMPROBANTE like '"+bcod_comprobante+"%'\n" +
                            "and CODIGO_CUENTA like '"+bcod_cuenta+"%'\n" +
                            "and UPPER(DESCRIPCION_CUENTA) like UPPER('"+bdesc_cuenta+"%')\n" +
                            "and (UPPER(CODIGO_CENTRO_COSTO) like UPPER('"+bcod_centro+"%') or CODIGO_CENTRO_COSTO is null)\n" +
                            "and (UPPER(DESCRIPCION_CENTRO_COSTO) like UPPER('"+bdesc_centro+"%') or DESCRIPCION_CENTRO_COSTO is null)\n" +
                            "and UPPER(GLOSA_CUENTA) like (UPPER('"+bglosa_cuenta+"%'))\n" +
                            "and UPPER(GLOSA_COMPROBANTE) like (UPPER('"+bglosa_comp+"%'))\n" +
                            "and UPPER(DESCRIPCION_COMPROBANTE) like UPPER('"+bdesc_comp+"%')\n" +
                            "and estado like '"+bestado+"%'\n";
            if(bdebe.length()>0){
                consulta+=" and DEBE_TC ="+bdebe;
            }
            if(bhaber.length()>0){
                consulta+=" and HABER_TC ="+bhaber;
            }
            consulta+=" and to_char(FECHA,'DD/MM/YYYY') like '"+bfecha+"%' ORDER BY ID";
            ResultSet rs = con.EjecutarConsulta(consulta);
            double sumadebe=0;
            double sumahaber=0;
            while(rs.next())
            {
                data+="<tr>";                       
                data+="<td>"+rs.getString("DESCRIPCION")+"</td>";
                data+="<td>"+rs.getString("CODIGO_COMPROBANTE")+"</td>";
                data+="<td>"+rs.getString("TIPO")+"</td>";
                data+="<td>"+d2.format(rs.getDate("FECHA"))+"</td>";
                data+="<td>"+rs.getString("CODIGO_CUENTA")+"</td>";
                data+="<td>"+rs.getString("DESCRIPCION_CUENTA")+"</td>";

                String cod_cen = rs.getString("CODIGO_CENTRO_COSTO");
                if(cod_cen!=null)
                    data+="<td>"+cod_cen+"</td>";
                else
                    data+="<td></td>";

                String desc_cen = rs.getString("DESCRIPCION_CENTRO_COSTO");
                if(desc_cen!=null)
                    data+="<td>"+desc_cen+"</td>";
                else
                    data+="<td></td>";

                data+="<td>"+rs.getString("GLOSA_CUENTA")+"</td>";
                data+="<td>"+rs.getString("GLOSA_COMPROBANTE")+"</td>";
                data+="<td>"+rs.getString("DESCRIPCION_COMPROBANTE")+"</td>";
                double debe = rs.getDouble("DEBE_TC");
                sumadebe+=debe;
                data+="<td>"+debe+"</td>";
                double haber=rs.getDouble("HABER_TC");
                sumahaber+=haber;
                data+="<td>"+haber+"</td>";

                Double estado = rs.getDouble("Estado");    
                data+="<td><span data-id=\""+rs.getDouble("ID")+"\"></span>";
                if(estado==0.0)
                {
                    data+="<input onchange='estado(this);'  type='checkbox' checked/>";
                }
                else
                {
                    data+="<input onchange='estado(this);'  type='checkbox'/>";
                }                        


                data+="</td>";
                data+="</tr>";            
            }
            data+="<tr>";
            data+="<td  colspan='11'>TOTAL</td>";
            data+="<td >"+sumadebe+"</td>";
            data+="<td >"+sumahaber+"</td>";
            data+="<td ></td>";
            data+="</tr>";
        }
        return data;
    }   
    
    private String sincc(HttpServletRequest request, HttpServletResponse response, Conexion con) throws SQLException {
        String data ="";
       
        String consulta = "select VP.ID, VP.DESCRIPCION, VP.CODIGO_COMPROBANTE, VP.FECHA, VP.CODIGO_CUENTA, VP.DESCRIPCION_CUENTA, VP.GLOSA_CUENTA, VP.GLOSA_COMPROBANTE, VP.DESCRIPCION_COMPROBANTE, VP.ESTADO, sum(VP.DEBE_TC) AS DEBE_TC, sum(VP.HABER_TC) AS HABER_TC\n" +
                        "from BROKER.CON_VISTA_PROYECTO VP\n" +
                        "group by ( VP.ID, VP.DESCRIPCION, VP.CODIGO_COMPROBANTE, VP.FECHA, VP.CODIGO_CUENTA, VP.DESCRIPCION_CUENTA, VP.GLOSA_CUENTA, VP.GLOSA_COMPROBANTE, VP.DESCRIPCION_COMPROBANTE, VP.ESTADO)\n" +
                        "ORDER BY CODIGO_COMPROBANTE";
        ResultSet rs = con.EjecutarConsulta(consulta);
        double sumadebe=0;
        double sumahaber=0;
        while(rs.next())
        {
            data+="<tr>";                       
            data+="<td>"+rs.getString("DESCRIPCION")+"</td>";
            data+="<td>"+rs.getString("CODIGO_COMPROBANTE")+"</td>";
            data+="<td>"+rs.getString("TIPO")+"</td>";
            data+="<td>"+d2.format(rs.getDate("FECHA"))+"</td>";
            data+="<td>"+rs.getString("CODIGO_CUENTA")+"</td>";
            data+="<td>"+rs.getString("DESCRIPCION_CUENTA")+"</td>";

            data+="<td>"+rs.getString("GLOSA_CUENTA")+"</td>";
            data+="<td>"+rs.getString("GLOSA_COMPROBANTE")+"</td>";
            data+="<td>"+rs.getString("DESCRIPCION_COMPROBANTE")+"</td>";
            double debe = rs.getDouble("DEBE_TC");
            sumadebe+=debe;
            data+="<td>"+debe+"</td>";
            double haber=rs.getDouble("HABER_TC");
            sumahaber+=haber;
            data+="<td>"+haber+"</td>";

            Double estado = rs.getDouble("Estado");    
            data+="<td><span data-id=\""+rs.getDouble("ID")+"\"></span>";
            if(estado==0.0)
            {
                data+="<input onchange='estado(this);'  type='checkbox' checked/>";
            }
            else
            {
                data+="<input onchange='estado(this);'  type='checkbox'/>";
            }                        


            data+="</td>";
            data+="</tr>";            
        }
        data+="<tr>";
        data+="<td style='background: blue; color: white;' colspan='8'>TOTAL</td>";
        data+="<td style='background: #D9E5D9; color: black;'>"+sumadebe+"</td>";
        data+="<td style='background: #D9E5D9; color: black;'>"+sumahaber+"</td>";
        data+="</tr>";
        return data;
    }   
    private SimpleDateFormat d2=new SimpleDateFormat("dd/MM/YYYY");
     private String concc(HttpServletRequest request, HttpServletResponse response, Conexion con) throws SQLException {
        
        String data ="";
        String consulta ="";
        
        String tipo =request.getParameter("tipo");
        if(tipo.equals("1"))
        {
            String mes =request.getParameter("mes");
            String ano =request.getParameter("ano");
            consulta = "select * from BROKER.CON_VISTA_PROYECTO where CODIGO_COMPROBANTE like('%-"+mes+"-"+ano+"') ORDER BY CODIGO_COMPROBANTE";
        }    
        else
        {
            String de =request.getParameter("de");
            String hasta =request.getParameter("hasta");
            consulta = "select * from BROKER.CON_VISTA_PROYECTO where FECHA between to_date('"+de+"','dd/mm/yyyy') and to_date('"+hasta+"','dd/mm/yyyy')  ORDER BY CODIGO_COMPROBANTE";
        }
        ResultSet rs = con.EjecutarConsulta(consulta);
        double sumadebe=0;
        double sumahaber=0;
         
        while(rs.next())
        {
            data+="<tr>";                       
            data+="<td>"+rs.getString("DESCRIPCION")+"</td>";
            data+="<td>"+rs.getString("CODIGO_COMPROBANTE")+"</td>";
            data+="<td>"+rs.getString("TIPO")+"</td>";
            data+="<td>"+d2.format(rs.getDate("FECHA"))+"</td>";
            data+="<td>"+rs.getString("CODIGO_CUENTA")+"</td>";
            data+="<td>"+rs.getString("DESCRIPCION_CUENTA")+"</td>";

            String cod_cen = rs.getString("CODIGO_CENTRO_COSTO");
            if(cod_cen!=null)
                data+="<td>"+cod_cen+"</td>";
            else
                data+="<td></td>";

            String desc_cen = rs.getString("DESCRIPCION_CENTRO_COSTO");
            if(desc_cen!=null)
                data+="<td>"+desc_cen+"</td>";
            else
                data+="<td></td>";

            data+="<td>"+rs.getString("GLOSA_CUENTA")+"</td>";
            data+="<td>"+rs.getString("GLOSA_COMPROBANTE")+"</td>";
            data+="<td>"+rs.getString("DESCRIPCION_COMPROBANTE")+"</td>";
            double debe = rs.getDouble("DEBE_TC");
            sumadebe+=debe;
            data+="<td>"+debe+"</td>";
            double haber=rs.getDouble("HABER_TC");
            sumahaber+=haber;
            data+="<td>"+haber+"</td>";

            Double estado = rs.getDouble("Estado");    
            data+="<td><span data-id=\""+rs.getDouble("ID")+"\"></span>";
            if(estado==0.0)
            {
                data+="<input onchange='estado(this);'  type='checkbox' checked/>";
            }
            else
            {
                data+="<input onchange='estado(this);'  type='checkbox'/>";
            }                        


            data+="</td>";
            data+="</tr>";            
        }
        data+="<tr>";
        data+="<td colspan='11'>TOTAL</td>";
        data+="<td >"+sumadebe+"</td>";
        data+="<td >"+sumahaber+"</td>";
        data+="<td ></td>";
        data+="</tr>";
        return data;
    }   
}
